/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import bean.Autor;
import bean.Noticia;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author jorgepereira
 */
public class NoticiaDAO implements Serializable {

    private Conexao conexao;
    private PreparedStatement ps;
    private boolean sucess = false;
    private ResultSet rs;

    public NoticiaDAO() {
        this.conexao = new ConexaoPostgres();

    }

    public Noticia selecionar(int id) {
        Noticia n = new Noticia();

        String query = "SELECT * FROM noticia WHERE id = ?";
        try {
            System.out.println("Id:" + id);
            ps = conexao.getConnection().prepareStatement(query);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                n.setId(rs.getInt("id"));
                n.setTitulo(rs.getString("titulo"));
                n.setData(rs.getDate("data"));
                n.getImagem().setId(rs.getInt("imagem"));
                n.setResumo(rs.getString("resumo"));
                n.setTexto(rs.getString("texto"));

            }
        } catch (SQLException ex) {
            conexao.closeConnection();
            Logger.getLogger(NoticiaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        conexao.closeConnection();
        return n;

    }
    
    public List<Noticia> buscarChamada() {
       
        List<Noticia> noticias = new ArrayList<Noticia>();
        String query = "SELECT id, resumo, titulo, imagem , data FROM noticia ORDER BY data desc, id LIMIT 3 ";
        try {
            
            ps = conexao.getConnection().prepareStatement(query);
            
            rs = ps.executeQuery();
            while (rs.next()) {
                 Noticia n = new Noticia();
                n.setId(rs.getInt("id"));
                n.setTitulo(rs.getString("titulo"));
                n.getImagem().setId(rs.getInt("imagem"));
                n.setResumo(rs.getString("resumo"));
                noticias.add(n);
                

            }
        } catch (SQLException ex) {
            conexao.closeConnection();
            Logger.getLogger(NoticiaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        conexao.closeConnection();
        return noticias;

    }

    public List<Noticia> buscarTodasNoticias() {
        ArrayList<Noticia> noticias = new ArrayList<Noticia>();

        String query = "SELECT id, titulo, data, resumo from noticia order by data";
        try {

            ps = conexao.getConnection().prepareStatement(query);
            rs = ps.executeQuery();

            while (rs.next()) {
                Noticia n = new Noticia();
                n.setId(rs.getInt("id"));
                n.setTitulo(rs.getString("titulo"));
                n.setData(rs.getDate("data"));
                n.setResumo(rs.getString("resumo"));
                noticias.add(n);
            }

            conexao.closeConnection();

        } catch (SQLException ex) {
            conexao.closeConnection();
            Logger.getLogger(InstituicaoDao.class.getName()).log(Level.SEVERE, null, ex);
            return noticias;
        }

        return noticias;

    }

    public boolean alterar(Noticia noticia) {
        boolean retorno = false;
        String update = "UPDATE noticia SET resumo=?, texto=?, titulo=?, imagem=?, data=? WHERE id = ?;";

        return retorno;
    }

    public boolean cadastrarAlterar(Noticia noticia) {
        boolean retorno = false;
        String consulta;
        if (noticia.getId() > 0) {
            consulta = "UPDATE noticia SET resumo=?, texto=?, titulo=?, imagem=?, data= now() WHERE id = ?;";

        } else {
            consulta = "INSERT INTO noticia( resumo, texto, titulo, imagem, data) VALUES (?, ?, ?, ?, now());";

        }

        sucess = false;

        try {

            ps = conexao.getConnection().prepareStatement(consulta);
            ps.setString(1, noticia.getResumo());
            ps.setString(2, noticia.getTexto());
            ps.setString(3, noticia.getTitulo());
            if (noticia.getId() > 0) {
                if (noticia.getImagem().getId() > 0) {
                    ps.setInt(4, noticia.getImagem().getId());
                } else {
                    System.out.println("Update Imagem nova!");
                    int idImg = new ImagemDao().cadastrarImagem(noticia.getImagem());
                    ps.setInt(4, idImg);
                }

                ps.setInt(5, noticia.getId());
            } else if (!"".equals(noticia.getImagem().getNome())) {
                int idImg = new ImagemDao().cadastrarImagem(noticia.getImagem());
                ps.setInt(4, idImg);
            } else {
                ps.setNull(4, Types.NULL);
            }

            ps.executeUpdate();
            conexao.closeConnection();

            sucess = true;
        } catch (SQLException ex) {
            conexao.closeConnection();
            Logger.getLogger(InstituicaoDao.class.getName()).log(Level.SEVERE, null, ex);
            return sucess;
        }

        conexao.closeConnection();
        return sucess;

    }
}
